import { Dimensions, PixelRatio, Platform } from 'react-native';
import '../assets';
import './os';
import './StyleColor';
import './storageInit';
import pathToRegexp from 'path-to-regexp';
import enums from '../enum';

export const deviceWidth = Dimensions.get('window').width; // 设备的宽度
export const deviceHeight = Dimensions.get('window').height; // 设备的高度
const fontScale = PixelRatio.getFontScale(); // 返回字体大小缩放比例
// const pixelRatio = PixelRatio.get(); // 当前设备的像素密度
const defaultPixel = 2;
// iphone6的像素密度
// px转换成dp
const defaultW = Platform.OS === 'ios' ? 750 : 720;
const defaultH = Platform.OS === 'ios' ? 1334 : 1280;
const w2 = defaultW / defaultPixel;
const h2 = defaultH / defaultPixel;
const scale = Math.min(deviceHeight / h2, deviceWidth / w2); // 获取缩放比例


// noinspection JSAnnotator
/**
 * 设置text为sp
 * @param size sp
 * return number dp
 */
export function setSpText(size) {
  // size = size/pixelRatio;
  size = Math.round((size * scale) / fontScale);
  return size;
}

// noinspection JSAnnotator
export function scaleSize(size) {
  size = Math.round(size * scale + 0.5);
  return size / defaultPixel;
}

export function Log(...params) {
  if (__DEV__) {
    // debug模式
    console.log(...params);
  } else {
    // release模式
    // Log('release模式');
  }
}

global.FONT = setSpText;

global.SCALE = scaleSize;

global.WIDTH = deviceWidth;

global.HEIGHT = deviceHeight;

global.Log = Log;

function getEnums(key) {
  const keys = key.split('.');
  return enums[keys[0]][keys[1]];
}


global.$t = getEnums;

/**
 * 判断参数的类型是否为function
 * @param {*} valid 参数
 * @returns true or false
 * @example
 * import {isFunction} from @/util/assist
 * // return true
 * const funs = function () {}
 * isFunction(funs)
 * // return false
 * const str = 'str111'
 * isFunction(str)
 */
export function isFunction(valid) {
  return typeof valid === 'function';
}

/**
 * 是否为字符串验证
 * @param {*} param 需验证的参数
 * @returns {Boolean}
 * @example
 * import {isString} from @/util/assist
 * // return true
 * isString('cys')
 * // return false
 * isString({name: 'cys'})
 */
export function isString(param) {
  return typeof param === 'string';
}

/**
 * 是否为数字验证
 * @param {*} param 需验证的参数
 * @returns {Boolean}
 * @example
 * import {isNumber} from @/util/assist
 * // return true
 * isString(111)
 * // return false
 * isString('cys')
 */
export function isNumber(param) {
  return typeof param === 'number';
}

/**
 * 是否为undefined验证
 * @param {*} param 需验证的参数
 * @returns {Boolean}
 * @example
 * import {isUndefined} from @/util/assist
 * // return true
 * isUndefined(undefined)
 * // return false
 * isUndefined({name: 'cys'})
 */
export function isUndefined(param) {
  return typeof param === 'undefined';
}

/**
 * 是否为数组验证
 * @param {*} param 需验证的参数
 * @returns {Boolean}
 * @example
 * import {isArray} from @/util/assist
 * // return true
 * isArray(['cys'])
 * // return false
 * isArray({name: 'cys'})
 */
export function isArray(param) {
  return Array.isArray(param);
}

/**
 * 是否为对象验证
 * @param {object} param 需验证的参数
 * @returns {boolean}
 * @example
 * import {isObject} from @/util/assist
 * // return true
 * isObject({name: 'cys'})
 * // return false
 * isObject(['cys'])
 */
export function isObject(param) {
  return Object.prototype.toString.call(param) === '[object Object]';
}

/**
 * path路径补全
 * @param {String} path 补全路径
 * @param {Object} params 参数
 * @returns 完整path
 * @example
 * import {compilePath} from @/util/assist
 * //  return '/user/123'
 * compilePath('/user/:id', { id: 123 })
 */
export function compilePath(path, params) {
  try {
    const toPath = pathToRegexp.compile(path);
    return toPath(params);
  } catch (error) {
    return path;
  }
}
